package cl.tinet.trainee.tarea6b.dao;

import java.util.ArrayList;

import javax.ejb.Local;

import cl.tinet.trainee.tarea6b.model.Usuario;
import cl.tinet.trainee.tarea6b.model.UsuarioNoEncontradoException;

@Local
/**
 * Interfaz que define los metodos a implementar por la clase DAO.
 * @author Frmancil
 *
 */
public interface InterfazUsuarioBeanDAO {

	/**
	 * Recibe del bean un usuario y lo agrega a la base de datos.
	 * 
	 * @param nuevoUsuario
	 *            Es el objeto usuario que recibe el metodo y agrega a la base
	 *            de datos.
	 */
	public void agregar(Usuario nuevoUsuario);

	/**
	 * Recibe del bean un usuario y lo elimina de la base de datos.
	 * 
	 * @param usuarioAEliminar
	 *            Es el objeto usuario que recibe el metodo, para buscarlo y
	 *            eliminar a su par.
	 * @throws UsuarioNoEncontradoException 
	 * 
	 */
	public void borrar(Usuario usuarioAEliminar) throws UsuarioNoEncontradoException;

	/**
	 * Recibe del bean un usuario y lo actualiza a la base de datos.
	 * 
	 * @param usuarioAActualizar
	 *            Es el objeto usuario que recibe el metodo, para buscarlo y
	 *            actualizar sus datos.
	 * @throws UsuarioNoEncontradoException 
	 */
	public void actualizar(Usuario usuarioAActualizar) throws UsuarioNoEncontradoException;

	/**
	 * Recibe del bean un usuario y lee sus atributos desde la base de datos.
	 * 
	 * @param username
	 *            Atributo para hacer busqueda de objeto.
	 * @return Usuario encontrado es retornado para desplegar sus datos.
	 */
	public Usuario leer(String username);

	/**
	 * Recibe del bean un String con el atributo username y lee sus atributos
	 * desde la base de datos.
	 * 
	 * @param usuarioABuscar
	 *            Objeto tipo usuario que se busca en la base de datos.
	 * @return Usuario encontrado es retornado para desplegar sus datos.
	 * @throws UsuarioNoEncontradoException 
	 */
	public Usuario buscar(Usuario usuarioABuscar) throws UsuarioNoEncontradoException;

	/**
	 * Metodo que retorna la lista de todos los usuarios.
	 * 
	 * @return Retorna una lista con todos los usuarios de la base de datos.
	 */
	public ArrayList<Usuario> listar();
}
